import pymysql


class DBUtil:
    conn = None
    cursor = None
    # 创建数据库的链接,变成私有方法
    @classmethod
    def __connect_db(cls):
        cls.conn=pymysql.connect(host="211.103.136.244", port=7061, user="student", password="iHRM_student_2022",
                       database="ihrm", charset="utf8")
        return cls.conn

    # 关闭数据库的链接，变成私有方法
    @classmethod
    def __close_db(cls):
        cls.conn.close()

    #封装数据库查询方法
    @classmethod
    def query_db(cls,sql):

        # 定义
        cursor = None
        result = None
        try:
            # 创建数据库的链接
            cls.conn=cls.__connect_db()
            # 获取游标
            cursor = cls.conn.cursor()
            # 执行查询语句,把查询结果返回
            cursor.execute(sql)
            result = cursor.fetchone()
        except Exception as err:
            print("查询数据库报错：", err)
        finally:
            # 关闭游标
            cursor.close()
            # 关闭数据库的链接
            cls.__close_db()
            # 结果最后返回：如果在中间返回的话，后面的代码不会被执行
            return result
    #封装数据库增删改方法
    @classmethod
    def uid_db(cls,sql):
        cursor = None
        try:
            # 创建数据库的链接
            cls.conn = cls.__connect_db()
            # 获取游标
            cursor = cls.conn.cursor()
            # 执行增删改语句,打印影响数据库的行数
            cursor.execute(sql)
            affect_rows = cls.conn.affected_rows()
            print("影响数据库的行号=", affect_rows)
            # 事务的提交 回滚
            cls.conn.commit()
        except Exception as err:
            print("增删改数据库报错:", err)
            # 事务的回滚
            cls.conn.rollback()
        finally:
            # 关闭游标
            cursor.close()
            # 关闭数据库的链接
            cls.__close_db()

if __name__ == '__main__':
    #创建类的对象去实例的方法
    db=DBUtil()
    db.uid_db()
    # 加上装饰器，直接调用;类名。方法名
    DBUtil.query_db()
    res = DBUtil.query_db("SELECT * FROM `t_book`;")